/*
 * FuncionesArchConfig.c
 *
 *  Created on: 25/09/2011
 *      Author: sk8julian
 */

 #include "./includes/FuncionesArchConfig.h"
#include "./includes/variablesGlobales.h"





 int buscaPalabraEnArchivoConfig(int *variableGlobal, char *palabraABuscar)
{
	 int tamanioArchivo;
	FILE *punteroDelArchivo;
	char *punteroContenidoArchivo;
	char *contenidoArchivo2;
	 int *variableAuxiliar;
	char bufferLog[100];

	variableAuxiliar=variableGlobal;
	punteroDelArchivo = fopen("../configFSS.txt","r+");

	memset(bufferLog,'\0',sizeof(bufferLog));
	if (!punteroDelArchivo)
		{
		sprintf(bufferLog,"No se pudo abrir el archivo de configuracion\n");
		printf("%s\n",bufferLog);
		fclose(punteroDelArchivo);
		return 0;
		}
	else
		{
		fseek(punteroDelArchivo, 0, SEEK_END);
		tamanioArchivo = ftell(punteroDelArchivo);
		contenidoArchivo2 =(char *)calloc(1,(tamanioArchivo+1)*sizeof(char));
		rewind(punteroDelArchivo);

		if(fread(contenidoArchivo2,sizeof(char),tamanioArchivo+1,punteroDelArchivo))
			{
			contenidoArchivo2[tamanioArchivo]='\0';
			punteroContenidoArchivo =strstr(contenidoArchivo2,palabraABuscar);

			if(!punteroContenidoArchivo)
				{
				sprintf(bufferLog,"No se encontro la variable global en el archivo de configuracion\n");
				printf("%s\n",bufferLog);
				free(contenidoArchivo2);
				fclose(punteroDelArchivo);
				return 0;
				}
			else
				{
				punteroContenidoArchivo = strtok(punteroContenidoArchivo,"=");
				punteroContenidoArchivo = strtok(NULL," ");
				*variableAuxiliar=atoi(punteroContenidoArchivo);
				sprintf(bufferLog,"Se asigno a %s, el valor %d\n",palabraABuscar,atoi(punteroContenidoArchivo));
				printf("%s\n",bufferLog);
				}
			}
		else
			{
			printf("Error al leer el archivo de configuracion\n");
			free(contenidoArchivo2);
			fclose(punteroDelArchivo);
			return 0;
			}
		}
	free(contenidoArchivo2);
	fclose(punteroDelArchivo);
return 1;
}



  int buscaStringEnArchivoConfig(char *palabraABuscar)
 {
 	 int tamanioArchivo;
 	FILE *punteroDelArchivo;
 	char *punteroContenidoArchivo=NULL;
 	char *variableAuxiliar=NULL;
 	char *contenidoDelArchivo=NULL;
 	char bufferLog[100];

 	punteroDelArchivo = fopen("../configFSS.txt","r+");
 	memset(bufferLog,'\0',sizeof(bufferLog));

 	if (!punteroDelArchivo)
 		{
 		sprintf(bufferLog,"Error al abrir el archivo para leer\n");
 		printf("%s\n",bufferLog);
 		fclose(punteroDelArchivo);
 		return 0;
 		}
 	else
 		{
 		fseek(punteroDelArchivo, 0, SEEK_END);
 		tamanioArchivo = ftell(punteroDelArchivo);
 		contenidoDelArchivo =(char *)calloc(1,(tamanioArchivo+1)*sizeof(char));
 		rewind(punteroDelArchivo);

 		if(fread(contenidoDelArchivo,sizeof(char),(tamanioArchivo+1),punteroDelArchivo))
 			{
 			contenidoDelArchivo[tamanioArchivo]='\0';
 			punteroContenidoArchivo =strstr(contenidoDelArchivo,palabraABuscar);

 			if(!punteroContenidoArchivo)
 				{
 				sprintf(bufferLog,"No se encontro la variable global en el archivo de configuracion\n");
 				printf("%s\n",bufferLog);
 				free(contenidoDelArchivo);
 				fclose(punteroDelArchivo);
 				return 0;
 				}
 			else
 				{
 				punteroContenidoArchivo = strtok(punteroContenidoArchivo,"=");
 				punteroContenidoArchivo = strtok(NULL,";");
 				variableAuxiliar=punteroContenidoArchivo;

 				//Aca se rellenan las variables que se leen del archivo


 				memset(direccionIPRaid,'\0',sizeof(direccionIPRaid));
 				strcpy(direccionIPRaid,variableAuxiliar);
 				sprintf(bufferLog,"Se asigno a %s, el valor %s",palabraABuscar,direccionIPRaid);
 				printf("%s\n",bufferLog);
 				free(contenidoDelArchivo);
 				}
 			}
 		else
 			{
 			printf("Error al leer el archivo de configuracion\n");
 			fclose(punteroDelArchivo);
 			free(contenidoDelArchivo);
 			return 0;
 			}
 		}
 	fclose(punteroDelArchivo);
 return 1;
 }

  int buscaString2EnArchivoConfig(char *palabraABuscar)
 {
 	 int tamanioArchivo;
 	FILE *punteroDelArchivo;
 	char *punteroContenidoArchivo=NULL;
 	char *variableAuxiliar=NULL;
 	char *contenidoDelArchivo=NULL;
 	char bufferLog[100];

 	punteroDelArchivo = fopen("../configFSS.txt","r+");
 	memset(bufferLog,'\0',sizeof(bufferLog));

 	if (!punteroDelArchivo)
 		{
 		sprintf(bufferLog,"Error al abrir el archivo para leer\n");
 		printf("%s\n",bufferLog);
 		fclose(punteroDelArchivo);
 		return 0;
 		}
 	else
 		{
 		fseek(punteroDelArchivo, 0, SEEK_END);
 		tamanioArchivo = ftell(punteroDelArchivo);
 		contenidoDelArchivo =(char *)calloc(1,(tamanioArchivo+1)*sizeof(char));
 		rewind(punteroDelArchivo);

 		if(fread(contenidoDelArchivo,sizeof(char),(tamanioArchivo+1),punteroDelArchivo))
 			{
 			contenidoDelArchivo[tamanioArchivo]='\0';
 			punteroContenidoArchivo =strstr(contenidoDelArchivo,palabraABuscar);

 			if(!punteroContenidoArchivo)
 				{
 				sprintf(bufferLog,"No se encontro la variable global en el archivo de configuracion\n");
 				printf("%s\n",bufferLog);
 				free(contenidoDelArchivo);
 				fclose(punteroDelArchivo);
 				return 0;
 				}
 			else
 				{
 				punteroContenidoArchivo = strtok(punteroContenidoArchivo,"=");
 				punteroContenidoArchivo = strtok(NULL,";");
 				variableAuxiliar=punteroContenidoArchivo;

 				//Aca se rellenan las variables que se leen del archivo


 				memset(direccionIPPDD,'\0',sizeof(direccionIPPDD));
 				strcpy(direccionIPPDD,variableAuxiliar);
 				sprintf(bufferLog,"Se asigno a %s, el valor %s",palabraABuscar,direccionIPPDD);
 				printf("%s\n",bufferLog);
 				free(contenidoDelArchivo);
 				}
 			}
 		else
 			{
 			printf("Error al leer el archivo de configuracion\n");
 			fclose(punteroDelArchivo);
 			free(contenidoDelArchivo);
 			return 0;
 			}
 		}
 	fclose(punteroDelArchivo);
 return 1;
 }


   int cargarArchivoDeConfiguracion()
  {


  	if(buscaPalabraEnArchivoConfig(&PuertoDelRaid,"Puerto del Raid")&&
  			buscaStringEnArchivoConfig("Direccion IP del Raid")
  			&& buscaPalabraEnArchivoConfig(&cantConex,"Cantidad de Conexiones")
  			&& buscaPalabraEnArchivoConfig(&tamCache,"Tamaño de la Cache")
  			&& buscaPalabraEnArchivoConfig(&flagLog,"Flag de el Log")
  			&& buscaPalabraEnArchivoConfig(&PuertoPDD,"Puerto del PDD")
  			&& buscaPalabraEnArchivoConfig(&PuertoPFS,"Puerto del PFS")
  			&& buscaString2EnArchivoConfig("Direccion IP del PDD"))
  		{
  		printf("Finalizo correctamente el proceso del archivo de configuracion\n");

  		}
  	else
  		{
  		printf("El proceso del archivo de configuracion finalizo de forma inesperada\n");

  		return 0;
  		}
  return 1;
  }

